<?php

namespace app\index\controller;

use think\Controller;
use think\exception\PDOException;
use think\Loader;
use think\Request;
use think\Validate;
// 引用的支付宝短信接口
use alidms\api_demo\SmsDemo;

class Login extends Controller
{
    /**
     * 显示资源列表
     */
    public function index()
    {
        $title = "登录页面";
        return view('/login',['title'=>$title]);
        //
    }

    // 用户登录
    public function login(Request $request)
    {
        $data = $request->param();

        $rule = [
            'usernum' => 'require|token',
            'password' => 'require'
        ];

        $validate = new \think\Validate($rule);

        if(!$validate->check($data)){

            $error = $validate->getError();
            return $this->error($error);
        }

        $data['password'] = md5passeword($data['password']);
//        sleep(2);
        $res = \app\index\model\Index::where(['usernum'=>$data['usernum'],'password'=>$data['password'] ])->find();

        if(!$res) {

            return $this->error("账号或者密码输入不正确",'/index/login/index');
        }
        session('users',$res);

        return $this->success("登录成功",'index/index/index');
    }

    // 用户注册
    public function register()
    {
        $title = "注册页面";
        return view('/login/register',['title'=>$title]);
    }

    // 用户注册成功
    public function regOk(Request $request)
    {
        $data = $request->param();

        // 数据验证
        $rule = [
            'username' => 'require|token',
            'phone' => 'require|number',
            'code' => 'require|number|max:4',
            'password' => 'require|confirm:repassword',
        ];

        $msg = [
            'username.require' => "姓名不允许为空",
            'username.token' => "重复提交了哦",
            'phone.require' => "手机号不允许为空",
            'phone.number' => "手机号格式不正确，必须都要为数字",
            'code.require' => "验证码不允许为空",
            'code.number' => "验证码格式不正确，必须都要为数字",
            'code.max' => "验证码最多为4位",
            'password.require' => "密码不允许为空",
            'password.confirm' => '密码不一致'
        ];

        $validate = new \think\Validate($rule,$msg);

        if(!$validate->check($data)){
            $error = $validate->getError();
            $this->error($error);
        }

        // 获取存储在缓存中的验证码,并且判断和用户输入的是否一致
        $code = cache("code");

        if($code != $data['code']){
            $this->error("验证码错误");
        }

        // 因为我的表名和数据库值 所以我就添加个字段传递过去
        $data['usernum'] = $data['phone'];

        // 这个是我使用的一个加密函数  默认密码可以直接使用md5加密
        $data['password'] = md5passeword($data['password']);

        // 到这一步说明上方的已经全部成功，所以直接入库
        \app\index\model\Index::create($data,true);

        //然后跳转到登陆页，
        return $this->success("注册成功,请登录","index/login/index");

    }

    // 发送短信验证码
    public function sendcode(int $phone)
    {
        // 首先判断一下当前的手机号不允许为空
        if(empty($phone)){
            return "手机号不允许为空";
        }

        // 判断数据库中是否存在手机号
        $result = \app\index\model\Index::where("usernum",'=',$phone)->find();
        if(isset($result)){

            $res = [
                'code' => 10002,
                'msg' => "数据库存在"
            ];
            return json($res);
        }

        // 随机4位验证码
        $code = mt_rand(1000,9999);
        // 模板文件
        $content = $code;
//       // 调用请求方法
        $flag = sendmsg($phone,$content);
//
        // 开发测试阶段 可以先不要发送出去，因为免费的比较少
//        $flag = true;

        // 调用支付宝接口
//        $response = SmsDemo::sendSms($phone,$code);
//        if($response->Code == "OK"){

        // 调用第三方接口
        if($flag){
            cache("code",$code,120);

            // 在这里可以输出一下
            $data = [
                'code' => 10000,
                'msg' => "成功",
            ];
            return json($data);
        }else{
            $data = [
                'code' => 10001,
                'msg' => "发送短信失败",
            ];
            return json($data);
        }
    }
}
